package com.qm.chp00introduction;

/**
 *
 */
// Java 是一门计算机编程语言，高级、健壮、面向对象，并且非常安全。它由 Sun 公司在 1995 年开发，主力开发叫 James Gosling，被称为
// Java 之父，
public class MyIntroduction1 {
  // Java 在叫“Java”之前，其实叫 Oak（橡树的意思，我感觉好像比 Java 好听一些）。怎么想到橡树的呢？James Gosling
  // 坐在办公室，望向窗外，视野里出现了一颗橡树。不过，遗憾的是，
  // Oak 已经被另外一家公司注册了，因此 1995 年 5 月 23 日，Oak 语言改名为 Java。
  // Java 这名字并不是 James Gosling 的首选，也不是命名团队的首选。团队其他人员更青睐 Silk（丝绸），但 Gosling
  // 不喜欢，他本人喜欢的是 Lyric（抒情诗），但没通过律师这一关。
  // 最后，排在第四位的“Java”脱颖而出。是不是像极了婴儿没生下来之前，家人就着急着起名的那种感觉，这个你觉得不行，那个他觉得不行，最后叫了“狗蛋”（😆）。
  // James Gosling 回忆说，“Java”是一个叫 Mark Opperman
  // 的人提议的，他是在一家咖啡店得到灵感的。奇妙的是，“Java”这个单词也是印度尼西亚爪哇岛的英文名，因生产咖啡而闻名，巧不巧？
  // 使用十六进制编辑器（比如说 wxMEdit）打开由 Java 源代码编译出的二进制文件（.class
  // 文件，后面会详细介绍，先不着急），就可以看得到，最前面的 8 个字符是 CA FE BA BE

  // 1）简单性
  // Java 为开发者提供了简单易用的用户体验，与其他面向对象编程语言相比，Java 的设计和生态库具有巨大的优势。Java 剔除了 C++
  // 中很少使用、难以理解、易混淆的特别，比如说指针运算、操作符重载，内存管理等。
  // Java 可以做到堆栈分配、垃圾回收和自动内存管理，在一定程度上为开发者减轻了入门的难度。
  // #2）可移植性
  // 如果 Java 直接编译成操作系统能识的二进制码，可能一个标识在 Windows 操作系统下是1100，而 Linux 下是 1001，这样的话，在
  // Windows 操作系统下可以运行的程序到了 Linux 环境下就无法运行。
  // 为了解决这个问题，Java 先编译生成字节码，再由 JVM（Java
  // 虚拟机）来解释执行，目的就是将统一的字节码转成操作系统可以识别的二进制码，然后执行。而针对不同的操作系统，都有相应版本的 JVM，所以 Java
  // 就实现了可移植性。
  // #3）安全性
  // Java 适用于网络/分布式环境，为了达到这个目标，在安全方面投入了巨大的精力。使用 Java 可以构建防病毒、防篡改的程序。
  // 从一开始，Java 就设计了很多可以防范攻击的机制，比如说：
  // 运行时堆栈溢出，这是蠕虫病毒常用的攻击手段。
  // 字节码验证，可以确保代码符合 JVM 规范并防止恶意代码破坏运行时环境。
  // 安全的类加载，可以防止不受信任的代码干扰 Java 程序的运行。
  // 全面的 API 支持广泛的加密服务，包括数字签名、消息摘要、（对称、非对称）密码、密钥生成器。
  // 安全通信，支持 HTTPS、SSL，保护传输的数据完整性和隐私性。
  // #4）并发性
  // Java 在多线程方面做得非常突出，只要操作系统支持，Java 中的线程就可以利用多个处理器，带来了更好的交互响应和实时行为。
  // JDK（Java Development Kit）是用于开发 Java 应用程序的软件环境。里面包含运行时环境（JRE）和其他 Java
  // 开发所需的工具，比如说解释器（java）、编译器（javac）、文档生成器（javadoc）等等。
  // JRE（Java Runtime Environment）是用于运行 Java 应用程序的软件环境。也就是说，如果只想运行 Java 程序而不需要开发
  // Java 程序的话，只需要安装 JRE 就可以了。
  // JVM (Java Virtual Machine) ，也就是 Java
  // 虚拟机，由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域等组成，屏蔽了不同操作系统（macOS、Windows、Linux）的差异性，使得
  // Java 能够“一次编译，到处运行”。
}
